package sad.dao;


import sad.modelo.Questao;
import sad.modelo.SubTopico;
import sad.util.DAOEvent;

public class QuestaoDAO extends AbstractDAO{
    
    private static QuestaoDAO INSTANCE = null;
 
    public static QuestaoDAO getInstance(){
        if (QuestaoDAO.INSTANCE ==null){
            QuestaoDAO.INSTANCE = new QuestaoDAO();
        }
        return QuestaoDAO.INSTANCE;
    }
  //C(reate)R(etrieve)U(pdate)D(elete)

  public Questao create(String fonte, String enunciado,
                            SubTopico s_top){

        Questao q = new Questao();
        //q.se(fonte);
        q.setEnunciado(enunciado);
        q.setSubTopico(s_top);
        if(DAO.create(q)){
            QuestaoDAO.getInstance().getSuporteEventos().disparaDAOEvento(
                    new DAOEvent(q.getEnunciado(), DAOEvent.DAO_CREATE)); 
            return q;
        }else{
            QuestaoDAO.getInstance().getSuporteEventos().disparaDAOEvento(
                    new DAOEvent(q.getEnunciado(), DAOEvent.DAO_NOCREATE));
            return null;
        }
  }

public boolean isExist(String enunciado) {
    boolean existe = false;
    Questao proto = new Questao();
    proto.setEnunciado(enunciado);
    Questao q = (Questao)DAO.retrieve(proto);
    if(q != null){
         existe = true;
         QuestaoDAO.getInstance().getSuporteEventos().disparaDAOEvento(
                new DAOEvent(enunciado, DAOEvent.DAO_EXISTE));
    }else{
         existe = false;
    }       
    return existe;
 }

  public static Questao getQuestaoSaved(String enunciado) {
    Questao proto = new Questao();
    proto.setEnunciado(enunciado);
    return (Questao) DAO.retrieve(proto);
  }
  
  public Questao update(Questao q) {
        
        if(DAO.create(q)){
            QuestaoDAO.getInstance().getSuporteEventos().disparaDAOEvento(
                    new DAOEvent(q.getEnunciado(), DAOEvent.DAO_UPDATE)); 
            return q;
        }else{
            QuestaoDAO.getInstance().getSuporteEventos().disparaDAOEvento(
                    new DAOEvent(q.getEnunciado(), DAOEvent.DAO_NOCREATE));
            return null;
        }
    } 
}